package main

import (
    "encoding/xml"
    "fmt"
    "io/ioutil"
    "os"
    "protohook/zlogger"
    "strings"
)

// 数据库信息
type DBNode struct {
    Addr string `xml:"addr,attr"`
    Port int32 `xml:"port,attr"`
}

// HookXMLRoot xml文件的根节点
type HookXMLRoot struct {
    Log             zlogger.ZLogNode `xml:"log"`
    IgnoreProtoList []string         `xml:"ignore_proto>proto"`
    GateDB DBNode `xml:"gatedb"`
    ListenPort int `xml:"ListenPort"`
    // RO代理的配置
    ROHookProxyConf ROProxyConf `xml:"ROProxy"`
    // RO协议文件的路径
    ROProtoXMLPath string `xml:"ROProtoXMLPath"`
}

var globalXmlConfig HookXMLRoot

// 读取xml配置
func (h *HookXMLRoot) TryLoad() {
    xmlContent, err := ioutil.ReadFile("hook.xml")
    if err != nil {
        fmt.Println("读取文件[hook.xml]失败,需要从[hook.template.xml]拷贝过来创建")
        os.Exit(1)
    }
    err = xml.Unmarshal(xmlContent, &h)
    if err != nil {
        fmt.Printf("解析[hook.xml]失败: [%s]\n", err.Error())
        os.Exit(1)
    }
    for i := range h.IgnoreProtoList {
        h.IgnoreProtoList[i] = strings.TrimSpace(h.IgnoreProtoList[i])
    }
    fmt.Println("解析xml配置成功")
}

func init()  {
    globalXmlConfig.TryLoad()
}
